﻿using System;
using System.Data;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;

namespace Gerenciador
{
    public partial class Senha : Form
    {
        Forma PK;   /*Referência o form principal*/

        /*Bloco abaixo guarda as informações do local onde a senha deverá ser procurada*/
    /*-------*/
        String Tabela = "";   /*Tabela onde iremos procurar a senha*/
        
        /*Posições na tabela onde iremos procurar a senha*/
        int X = 0;
        int Y = 0;
    /*-------*/
        

        public Senha()
        {
            InitializeComponent();
        
        }


        private void Senha_Load(object sender, EventArgs e)
        {
            /*Iniciando forma em fade*/
            Desenho Draw = new Desenho();
            Draw.IniciarEmFade(this, 90);
            
        }


        private void B_OK_Click(object sender, EventArgs e)
        {
            SQLConnect Conexao = new SQLConnect();   /*Objeto que representa uma conexão com o banco de dados*/
            PK.ConectarAoBanco(Conexao);   /*Conectando-se ao banco de dados*/

            /*Fazendo a busca no banco e comparando com a senha digitada pelo usuário*/
        /*-------*/
            String[,] Resultado = Conexao.SelectFull(Tabela);   /*Executando a consulta completa*/
            
            /*Trabalhando com a criptografia que acontece ao pegar cada letra separada do campo senha e fazer 
             * uma iteração descrescente pela posição da letra*/
            /*-------*/
            
            List<char> Letras = new List<char>();   /*Guarda cada char da senha separadamente*/ 
            String Senha = "";   /*Guarda a senha descriptografada*/
            
            try
            {
                Letras  = Resultado[X, Y].ToList<char>();   /*Buscando a senha na posição indicada*/

            }
            catch   /*Qualquer erro nesta parte significa que a tabela em questão não existe, está vazia, ou está corrompida*/
            {
                MessageBox.Show("        O software encontrou um problema nos\n        registros da tabela \"" + Tabela +
                    "\".\n\n         * Favor verificar com o DBA do banco a\n        integridade dos dados.");

                MessageBox.Show("Finalizando o gerenciador de arquivos!");
                PK.FalhaDeConexao = true;   /*Isso assegura que o software seja encerrado sem fazer nenhuma pergunta ao usuário*/
                
                /*Finalizando a execução*/
                PK.Close();
                this.Close();
                return;

            }
            
            /*Desmembrando a senha e remontando-a no formato correto*/
            for(int i = 0; i < Resultado[X,Y].Count(); i++)
            {
                /*Criptografia Adotada*/
                for(int j = 0; j <= i; j++)
                    Letras[i]--;

                Senha += Letras[i];   /*Remontando letra por letra*/

            }
        /*-------*/

            Console.WriteLine(Senha);
           
        }


        /*Método que cria uma referência com o form principal, e informa se este form foi aberto
         * pelo botão de 'Edição' ou 'Visualização'*/
        public void VincularForm(Forma PRINCIPAL, String A_Tabela, int B_X, int C_Y)
        {
            PK = PRINCIPAL;
            Tabela = A_Tabela;
            X = B_X;
            Y = C_Y;

        }
        

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                button1_Click(null, null);
            
        }


        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();

        }


        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void C_Senha_TextChanged(object sender, EventArgs e)
        {

        }

        

    }
}
